perm filename FHT.MAC[9,ALS] blob sn#001158 filedate 1971-10-19 generic text, type T, neo UTF8
00010	TITLE	FHTEX
00020	;	  FAST HADAMARD TRANSFORM 842 FOR N=2**N2POW
00030	;	THIS PROGRAM REPLACES THE VECTOR Z=X+IY BY ITS FINITE
00040	;	DISCRETE, COMPLEX HADAMARD TRANSFORM.  IT PERFORMS AS MANY BASE
00050	;	8 ITERATIONS AS POSSIBLE AND THEN FINISHES WITH A BASE 4
00060	;	ITERATION OR A BASE 2 ITERATION IF NEEDED.
00070	;
00080	;	THE SUBROUTINE IS CALLED AS SUBROUTINE FHTEX(N2POW,X,Y)
00090	;	THE INTEGER N2POW (WHERE N=2**N2POW), THE N REAL LOCATION
00100	;	ARRAY X, AND THE N REAL LOCATION ARRAY Y MUST BE SUPPLIED
00110	;	TO THE SUBROUTINE.
00120	;
00130	;
00140	;
00150		ENTRY	FHTEX
00160	FHTEX:	0
00170		MOVEM	17,SAVE+17
00180		MOVE	17,[XWD 0,SAVE]
00190		BLT	17,SAVE+16
00200		MOVE	0,@0(16)
00210		HRRM	0,N2POWA	;INITAILIZE IMMED. CONST. N2POW
00220		HRRM	0,N2POWB	;INITAILIZE IMMED. CONST. N2POW
00230		HRRM	0,N2POWC	;INITAILIZE IMMED. CONST. N2POW
00240		HRRM	0,N2POWD	;INITAILIZE IMMED. CONST. N2POW
00250		MOVE	0,1(16)
00260		HRRM	0,LOP$1	;INITIALIZE IMMED. CONST. PTR TO X ARRAY
00270		HRRM	0,LOP$3	;INITIALIZE IMMED. CONST. PTR TO X ARRAY
00280		HRRM	0,LOP$5	;INITIALIZE IMMED. CONST. PTR TO X ARRAY
00290		SUBI	0,1
00300		MOVEM	0,X#
00310		HRRM	0,R2CR0A
00320		HRRM	0,R2CR0B
00330		HRRM	0,R4CR0A
00340		HRRM	0,R4CR0B
00350		HRRM	0,R8CR0A
00360		HRRM	0,R8CR0B
00370		ADDI	0,1
00380		HRRM	0,R2CR1A
00390		HRRM	0,R2CR1B
00400		HRRM	0,R4CR1A
00410		HRRM	0,R4CR1B
00420		ADDI	0,1
00430		HRRM	0,R4CR2A
00440		HRRM	0,R4CR2B
00450		HRRM	0,R4CR2C
00460		ADDI	0,1
00470		HRRM	0,R4CR3A
00480		HRRM	0,R4CR3B
00490		HRRM	0,R4CR3C
00500		MOVE	0,2(16)
00510		HRRM	0,LOP$2	;INITIALIZE IMMED. CONST. PTR TO Y ARRAY
00520		HRRM	0,LOP$4	;INITIALIZE IMMED. CONST. PTR TO Y ARRAY
00530		HRRM	0,LOP$6	;INITIALIZE IMMED. CONST. PTR TO Y ARRAY
00540		SUBI	0,1
00550		MOVEM	0,Y#
00560		HRRM	0,R2CI0A
00570		HRRM	0,R2CI0B
00580		HRRM	0,R4CI0A
00590		HRRM	0,R4CI0B
00600		HRRM	0,R8CI0A
00610		HRRM	0,R8CI0B
00620		ADDI	0,1
00630		HRRM	0,R2CI1A
00640		HRRM	0,R2CI1B
00650		HRRM	0,R4CI1A
00660		HRRM	0,R4CI1B
00670		ADDI	0,1
00680		HRRM	0,R4CI2A
00690		HRRM	0,R4CI2B
00700		HRRM	0,R4CI2C
00710		ADDI	0,1
00720		HRRM	0,R4CI3A
00730		HRRM	0,R4CI3B
00740		HRRM	0,R4CI3C
00750		MOVEI	0,1
00760	N2POWA:	LSH	0,.-.	;MODIFIED TO CONST. N2POW
00770		HRRM	0,NTHPOA	;INITIALIZE IMMED. CONST. NTHPO
00780		HRRM	0,NTHPOB	;INITIALIZE IMMED. CONST. NTHPO
00790		HRRM	0,NTHPOC	;INITIALIZE IMMED. CONST. NTHPO
00800		HRRM	0,NTHPOD	;INITIALIZE IMMED. CONST. NTHPO
00810	N2POWB:	MOVEI	1,.-.	;MODIFIED TO CONST. N2POW
00820		IDIVI	1,3
00830		HRRM	1,N8POWA	;INITIALIZE IMMED. CONST. N8POW
00840		HRRM	1,N8POWB	;INITIALIZE IMMED. CONST. N8POW
00850		JUMPE	1,P3
00860		MOVEI	15,1
00870	;***ALL CODE ABOVE IS EXECUTED ONLY ONCE AS INITIALIZATION***
00880	LOOP1:	MOVEM	15,IPASS#
00890		IMUL	15,[-3]
00900	N2POWC:	ADDI	15,.-.	;MODIFIED TO CONST. N2POW
00910		MOVEI	3,1
00920		LSH	3,@15
00930		MOVEM	3,NXTLT#
00940		SUBI	3,1
00950		HRRM	3,NXTLTA	;INIT. IMMED. VAR. NXTLT-1
00960		ADDI	3,1
00970		ASH	3,3
00980		MOVEM	3,LENGT#
00990		HRRM	3,LENGTA	;INIT. IMMED. VAR. LENGT
01000		JRST	R8TX
01010	CONT8:	MOVE	15,IPASS
01020	N8POWA:	CAIGE	15,.-.	;INITED TO IMMED. CONST. N8POW
01030		AOJA	15,LOOP1
01040	P3:
01050	N8POWB:	MOVNI	4,.-.	;INITED TO IMMED. CONST. N8POW
01060		IMULI	4,3
01070	N2POWD:	ADDI	4,.-.	;MODIFIED TO CONST. N2POW
01080		SUBI	4,1
01090		JUMPL	4,P5
01100		JUMPG	4,P7
01110		JRST	R2TX
01120	P7:	JRST	R4TX
01130		JRST	FINISH
01140	R2TX:	MOVEI	15,1
01150	R2TXL:
01160	R2CR0A:	MOVE	1,.-.(15)	;	1=CR0
01170	R2CR1A:	MOVE	2,.-.(15)	;	2=CR1
01180	R2CR0B:	ADDM	2,.-.(15)	;	CR0=CR1+CR0
01190	R2CR1B:	SUBM	1,.-.(15)	;	CR1=CR0-CR1
01200	R2CI0A:	MOVE	1,.-.(15)	;	1=CI0
01210	R2CI1A:	MOVE	2,.-.(15)	;	2=CI2
01220	R2CI0B:	ADDM	2,.-.(15)	;	CI0=CI1+CI0
01230	R2CI1B:	SUBM	1,.-.(15)	;	CI1=CI0-CI1
01240		ADDI	15,2
01250	NTHPOA:	CAIG	15,.-.	;INITED TO IMMED. CONST. NTHPO
01260		JRST	R2TXL
01270		JRST	P5
01280	R4TX:	MOVEI	15,1
01290	R4TXL:
01300	R4CR0A:	MOVE	1,.-.(15)	;	1=CR0
01310	R4CR2A:	ADD	1,.-.(15)	;	1=R1=CR0+CR2
01320	R4CR1A:	MOVE	2,.-.(15)	;	2=CR1
01330	R4CR3A:	ADD	2,.-.(15)	;	2=R3=CR1+CR3
01340	R4CI0A:	MOVE	3,.-.(15)	;	3=CI0
01350	R4CI2A:	ADD	3,.-.(15)	;	3=FI1=CI0+CI2
01360	R4CI1A:	MOVE	4,.-.(15)	;	4=CI1
01370	R4CI3A:	ADD	4,.-.(15)	;	4=FI3=CI1+CI3
01380		MOVE	5,1		;	5=R1
01390		ADD	5,2		;**	5=CR0=R1+R3
01400		SUB	1,2		;**	1=CR1=R1-R3
01410		MOVE	2,3		;	2=FI1
01420		ADD	2,4		;**	2=CI0=FI1+FI3
01430		SUB	3,4		;**	3=CI1=FI1-FI3
01440	R4CR0B:	EXCH	5,.-.(15)	;*	5=CR0
01450	R4CR1B:	EXCH	1,.-.(15)	;*	1=CR1
01460	R4CI0B:	EXCH	2,.-.(15)	;*	2=CI0
01470	R4CI1B:	EXCH	3,.-.(15)	;*	3=CI1
01480	R4CR2B:	SUB	5,.-.(15)	;	5=R2=CR0-CR2
01490	R4CR3B:	SUB	1,.-.(15)	;	1=R4=CR1-CR3
01500	R4CI2B:	SUBB	2,.-.(15)	;	2=CI2=FI2=CI0-CI2
01510	R4CI3B:	SUB	3,.-.(15)	;	3=FI4=CI1-CI3
01520		MOVE	4,5		;	4=R2
01530		SUB	4,3		;**	4=CR2=R2-FI4
01540		ADD	5,3		;**	5=CR3=R2+FI4
01550	R4CI2C:	ADDM	1,.-.(15)	;*CI2=R4+FI2
01560		SUB	2,1		;**	2=CI3=FI2-R4
01570	R4CR2C:	MOVEM	4,.-.(15)	;*	4=CR2
01580	R4CR3C:	MOVEM	5,.-.(15)	;*	5=CR3
01590	R4CI3C:	MOVEM	2,.-.(15)	;*	2=CI3
01600		ADDI	15,4
01610	NTHPOB:	CAIG	15,.-.		;INITED TO IMMED. CONST. NTHPO
01620		JRST	R4TXL
01630		JRST	P5
01640	R8TX:	MOVE	0,X
01650		ADD	0,NXTLT
01660		HRRM	0,R8CR1A
01670		HRRM	0,R8CR1B
01680		ADD	0,NXTLT
01690		HRRM	0,R8CR2A
01700		HRRM	0,R8CR2B
01710		ADD 	0,NXTLT
01720		HRRM	0,R8CR3A
01730		HRRM	0,R8CR3B
01740		ADD	0,NXTLT
01750		HRRM	0,R8CR4A
01760		HRRM	0,R8CR4B
01770		HRRM	0,R8CR4C
01780		ADD	0,NXTLT
01790		HRRM	0,R8CR5A
01800		HRRM	0,R8CR5B
01810		HRRM	0,R8CR5C
01820		ADD	0,NXTLT
01830		HRRM	0,R8CR6A
01840		HRRM	0,R8CR6B
01850		HRRM	0,R8CR6C
01860		ADD	0,NXTLT
01870		HRRM	0,R8CR7A
01880		HRRM	0,R8CR7B
01890		HRRM	0,R8CR7C
01900		MOVE	0,Y
01910		ADD	0,NXTLT
01920		HRRM	0,R8CI1A
01930		HRRM	0,R8CI1B
01940		ADD	0,NXTLT
01950		HRRM	0,R8CI2A
01960		HRRM	0,R8CI2B
01970		ADD	0,NXTLT
01980		HRRM	0,R8CI3A
01990		HRRM	0,R8CI3B
02000		ADD	0,NXTLT
02010		HRRM	0,R8CI4A
02020		HRRM	0,R8CI4B
02030		HRRM	0,R8CI4C
02040		ADD	0,NXTLT
02050		HRRM	0,R8CI5A
02060		HRRM	0,R8CI5B
02070		HRRM	0,R8CI5C
02080		ADD	0,NXTLT
02090		HRRM	0,R8CI6A
02100		HRRM	0,R8CI6B
02110		HRRM	0,R8CI6C
02120		ADD	0,NXTLT
02130		HRRM	0,R8CI7A
02140		HRRM	0,R8CI7B
02150		HRRM	0,R8CI7C
02160	;ACCUMULATORS
02170	AC0=0
02180	AC1=1
02190	AC2=2
02200	AC3=3
02210	AC4=4
02220	AC5=5
02230	AC6=6
02240	AC7=7
02250	AC10=10
02260	AC11=11
02270	AC12=12
02280	AC13=13
02290	ACJ=14
02300	ACK=15
02310	ACR2=16
02320	ACMR2=17
02330		MOVEI	ACJ,0	;INIT J
02340		MOVEI	ACK,1(ACJ)	;SETUP K
02350		JRST	LOOPK	;FAST START
02360	LOOPJ:	MOVEM	ACJ,J#	;SAVE J
02370		MOVEI	ACK,1(ACJ)	;SETUP K
02380	LOOPK:
02390	;INNER-MOST LOOP F0R RADIX 8 ITERATI0N
02400	R8CR0A:	MOVE	AC0,.-.(ACK)	;CR0+CR4
02410	R8CR4A:	ADD	AC0,.-.(ACK)	;	AC0=AR0
02420	R8CR1A:	MOVE	AC1,.-.(ACK)	;CR1+CR5
02430	R8CR5A:	ADD	AC1,.-.(ACK)	;	AC1=AR1
02440	R8CR2A:	MOVE	AC2,.-.(ACK)	;CR2+CR6
02450	R8CR6A:	ADD	AC2,.-.(ACK)	;	AC2=AR2
02460	R8CR3A:	MOVE	AC3,.-.(ACK)	;CR3+CR7
02470	R8CR7A:	ADD	AC3,.-.(ACK)	;	AC3=AR3
02480	R8CI0A:	MOVE	AC4,.-.(ACK)	;CI0+CI4
02490	R8CI4A:	ADD	AC4,.-.(ACK)	;	AC4=AI0
02500	R8CI1A:	MOVE	AC5,.-.(ACK)	;CI1+CI5
02510	R8CI5A:	ADD	AC5,.-.(ACK)	;	AC5=AI1
02520	R8CI2A:	MOVE	AC6,.-.(ACK)	;CI2+CI6
02530	R8CI6A:	ADD	AC6,.-.(ACK)	;	AC6=AI2
02540	R8CI3A:	MOVE	AC7,.-.(ACK)	;CI3+CI7
02550	R8CI7A:	ADD	AC7,.-.(ACK)	;	AC7=AI3
02560		MOVE	AC10,AC0	;	AC10=AR0
02570		MOVE	AC11,AC1	;	AC11=AR1
02580		MOVE	AC12,AC4	;	AC12=AI0
02590		MOVE	AC13,AC5	;	AC13=AI1
02600		ADD	AC10,AC2	;	AC10=BR0=AR0+AR2
02610		SUB	AC11,AC3	;	AC11=BR3=AR1-AR3
02620		ADD	AC12,AC6	;	AC12=BI0=AI0+AI2
02630		SUB	AC13,AC7	;	AC13=BI3=AI1-AI3
02640		SUBB	AC0,AC2		;	AC0=AC2=BR2=AR0-AR2
02650		ADDB	AC1,AC3		;	AC1=AC3=BR1=AR1+AR3
02660		SUBB	AC4,AC6		;	AC4=AC6=BI2=AI0-AI2
02670		ADDB	AC5,AC7		;	AC5=AC7=BI1=AI1+AI3
02680		ADD	AC1,AC10	;**	AC1=CR0=BR1+BR0
02690		ADD	AC5,AC12	;**	AC5=CI0=BI1+BI0
02700		JUMPE	ACJ,R8J0A	;J=0	SPECIAL CASE
02710		SUBB	AC12,AC7	;	AC12=AC7=BI0-BI1
02720		SUBB	AC10,AC3	;	AC10=AC3=BR0-BR1
02730		SUB	AC10,AC7	;**	AC10=CR1
02740		ADD	AC12,AC3	;**	AC12=CI1
02750		SUB	AC0,AC13	;	AC0=BR2-BI3
02760		MOVE	AC7,AC0		;=AC7
02770		ADDB	AC2,AC13	;	AC2=AC13=BR2+BI3
02780		SUB	AC4,AC11	;	AC4=BI2-BR3
02790		MOVE	AC3,AC4		;=AC3
02800		ADDB	AC6,AC11	;	AC6=AC11=BI2+BR3
02810		SUB	AC0,AC6		;**	AC0=CR2
02820		ADD	AC11,AC7	;**	AC11=CI2
02830		SUB	AC13,AC3	;**	AC13=CR3
02840		ADD	AC4,AC2		;**	AC4=CI3
02850	R8JXA:
02860	R8CR0B:	EXCH	AC1,.-.(ACK)	;*	AC1=CR0
02870	R8CR1B:	EXCH	AC10,.-.(ACK)	;*	AC10=CR1
02880	R8CR2B:	EXCH	AC0,.-.(ACK)	;*	AC0=CR2
02890	R8CR3B:	EXCH	AC13,.-.(ACK)	;*	AC13=CR3
02900	R8CI0B:	EXCH	AC5,.-.(ACK)	;*	AC5=CI0
02910	R8CI1B:	EXCH	AC12,.-.(ACK)	;*	AC12=CI1
02920	R8CI2B:	EXCH	AC11,.-.(ACK)	;*	AC11=CI2
02930	R8CI3B:	EXCH	AC4,.-.(ACK)	;*	AC4=CI3
02940	R8CR4B:	SUB	AC1,.-.(ACK)	;	AC1=AR4
02950	R8CR5B:	SUB	AC10,.-.(ACK)	;	AC10=AR5
02960	R8CR6B:	SUB	AC0,.-.(ACK)	;	AC0=AR6
02970	R8CR7B:	SUB	AC13,.-.(ACK)	;	AC13=AR7
02980	R8CI4B:	SUB	AC5,.-.(ACK)	;	AC5=AI4
02990	R8CI5B:	SUB	AC12,.-.(ACK)	;	AC12=AI5
03000	R8CI6B:	SUB	AC11,.-.(ACK)	;	AC11=AI6
03010	R8CI7B:	SUB	AC4,.-.(ACK)	;	AC4=AI7
03020		MOVE	AC2,AC1		;	AC2=AR4
03030		MOVE	AC3,AC10	;	AC3=AR5
03040		MOVE	AC6,AC5		;	AC6=AI4
03050		MOVE	AC7,AC12	;	AC7=AI5
03060		ADD	AC1,AC11	;	AC1=BR6=AR4+AI6
03070		SUBB	AC2,AC11	;	AC2=AC11=BR4=AR4-AI6
03080		ADD	AC3,AC4		;	AC3=BR7=AR5+AI7
03090		SUBB	AC10,AC4	;	AC4=AC10=BR5=AR5-AI7
03100		SUB	AC6,AC0		;	AC6=BI6=AI4-AR6
03110		ADDB	AC5,AC0		;	AC5=AC0=BI4=AI4+AR6
03120		SUB	AC7,AC13	;	AC7=BI7=AI5-AR7
03130		ADD	AC12,AC13	;	AC12=BI5=AI5+AR7
03140		SUB	AC4,AC12	;	AC4=BR5-BI5
03150		ADD	AC10,AC12	;	AC10=BR5+BI5
03160		MOVE	AC12,AC3	;	AC12=BR7
03170		ADD	AC12,AC7	;	AC12=BR7+BI7
03180		SUB	AC3,AC7		;	AC3=BR7-BI7
03190		JUMPE	ACJ,R8J0B	;J=0	SPECIAL CASE
03200		ADD	AC2,AC4		;	AC2=BR4+TR5
03210		MOVE	AC7,AC2		;=AC7
03220		SUBB	AC11,AC4	;	AC11=AC4=BR4-TR5
03230		ADD	AC5,AC10	;	AC5=BI4+TI5
03240		MOVE	AC13,AC5	;=AC13
03250		SUBB	AC0,AC10	;	AC0=AC10=BI4-TI5
03260		SUB	AC2,AC13	;**	AC2=CR4
03270		ADD	AC5,AC7		;**	AC5=CI4
03280		SUB	AC11,AC10	;**	AC11=CR5
03290		ADD	AC0,AC4		;**	AC0=CI5
03300		MOVE	AC4,AC1		;	AC4=BR6
03310		MOVE	AC7,AC6		;	AC7=BI6
03320		ADD	AC1,AC12	;	AC1=BR6+TR7
03330		MOVE	AC13,AC1	;=AC13
03340		ADD	AC6,AC3		;	AC6=BI6+TI7
03350		MOVE	AC10,AC6	;=AC10
03360		SUBB	AC4,AC12	;	AC4=AC12=BR6-TR7
03370		SUBB	AC7,AC3		;	AC7=AC3=BI6-TI7
03380		SUB	AC1,AC10	;**	AC1=CR6
03390		ADD	AC6,AC13	;**	AC6=CI6
03400		SUB	AC4,AC3		;**	AC4=CR7
03410		ADD	AC7,AC12	;**	AC7=CI7
03420	R8JXB:
03430	R8CR4C:	MOVEM	AC2,.-.(ACK)	;*	AC2=CR4
03440	R8CR5C:	MOVEM	AC11,.-.(ACK)	;*	AC11=CR5
03450	R8CR6C:	MOVEM	AC1,.-.(ACK)	;*	AC1=CR6
03460	R8CR7C:	MOVEM	AC4,.-.(ACK)	;*	AC4=CR7
03470	R8CI4C:	MOVEM	AC5,.-.(ACK)	;*	AC5=CI4
03480	R8CI5C:	MOVEM	AC0,.-.(ACK)	;*	AC0=CI5
03490	R8CI6C:	MOVEM	AC6,.-.(ACK)	;*	AC6=CI6
03500	R8CI7C:	MOVEM	AC7,.-.(ACK)	;*	AC7=CI7
03510	LENGTA:	ADDI	ACK,.-.		;INITED TO IMMED. VAR. LENGT BY LOOP1
03520	NTHPOC:	CAIG	ACK,.-.		;INITED TO IMMED. CONST. NTHPO
03530		JRST	LOOPK		;LOOP
03540	NXTLTA:	CAIGE	ACJ,.-.		;INITED TO IMMED. VAR. NXTLT-1 BY LOOP1
03550		AOJA	ACJ,LOOPJ	;LOOP
03560		JRST	CONT8		;CONTINUE
03570	;J=0	SPECIAL CASE	A
03580	R8J0A:
03590		SUB	AC10,AC3	;**	AC10=CR1=BR0-BR1
03600		SUB	AC12,AC7	;**	AC12=CI1=BI0-BI1
03610		SUB	AC0,AC13	;**	AC0=CR2=BR2-BI3
03620		SUB	AC4,AC11	;**	AC4=CI3=BI2-BR3
03630		ADD	AC11,AC6	;**	AC11=CI2=BR3+BI2
03640		ADD	AC13,AC2	;**	AC13=CR3=BI3+BR2
03650		JRST	R8JXA		;CONTINUE
03660	;J=0	SPECIAL CASE	B
03670	R8J0B:
03680		ADD	AC2,AC4	;**	AC2=CR4=BR4+TR5
03690		ADD	AC5,AC10	;**	AC5=CI4=BI4+TI5
03700		SUB	AC11,AC4	;**	AC11=CR5=BR4-TR5
03710		SUB	AC0,AC10	;**	AC0=CI5=BI4-TI5
03720		MOVE	AC4,AC1		;	AC4=BR6
03730		MOVE	AC7,AC6		;	AC7=BI6
03740		ADD	AC1,AC12	;**	AC1=CR6=BR6+TR7
03750		ADD	AC6,AC3		;**	AC6=CI6=BI6+TI7
03760		SUB	AC4,AC12	;**	AC4=CR7=BR6-TR7
03770		SUB	AC7,AC3		;**	AC7=CI7=BI6-TI7
03780		JRST	R8JXB		;CONTINUE
03790	P5:
03800	NTHPOD:	MOVEI	1,.-.	;INITED TO IMMED. CONST. NTHPO
03810		SUBI	1,1
03820		MOVE	2,1
03830		MOVE	3,1
03840		SUBI	2,1
03850	LOOP:	JFFO	3,.+1
03860		XOR	3,TABLE-25(4)
03870		AND	3,1
03880		CAMG	3,2
03890		JRST	BD2
03900	LOP$1:	MOVE	5,.-.(3)	;INITED TO IMMED. CONST. PTR TO X ARRAY
03910	LOP$2:	MOVE	7,.-.(3)	;INITED TO IMMED. CONST. PTR TO Y ARRAY
03920	LOP$3:	EXCH	5,.-.(2)	;INITED TO IMMED. CONST. PTR TO X ARRAY
03930	LOP$4:	EXCH	7,.-.(2)	;INITED TO IMMED. CONST. PTR TO Y ARRAY
03940	LOP$5:	MOVEM	5,.-.(3)	;INITED TO IMMED. CONST. PTR TO X ARRAY
03950	LOP$6:	MOVEM	7,.-.(3)	;INITED TO IMMED. CONST. PTR TO Y ARRAY
03960	BD2:	SOJG	2,LOOP
03970	FINISH:	MOVE	17,[XWD SAVE,0]
03980		BLT	17,17
03990		JRA	16,3(16)
04000	TABLE:	↑B111111111111111111111100000000000000
04010		↑B111111111111111111111110000000000000
04020	        ↑B111111111111111111111111000000000000
04030		↑B111111111111111111111111100000000000
04040		↑B111111111111111111111111110000000000
04050		↑B111111111111111111111111111000000000
04060		↑B111111111111111111111111111100000000
04070		↑B111111111111111111111111111110000000
04080		↑B111111111111111111111111111111000000
04090		↑B111111111111111111111111111111100000
04100		↑B111111111111111111111111111111110000
04110		↑B111111111111111111111111111111111000
04120		↑B111111111111111111111111111111111100
04130		↑B111111111111111111111111111111111110
04140		↑B111111111111111111111111111111111111
04150	SAVE:	BLOCK	20
04160		END